# 导包
import logging
from logging import handlers
from config import path_dir
import os


# 1-封装一个日志的工具类(分别封装1个日志器+处理器+格式器，然后将格式器装到处理器，再将处理器装到日志器，最后返回日志器)
class GetLog:

    log = None  # 初始化日志器

    # 2-封装一个日志的实现方法
    @classmethod  # 定义为类方法，后续可以直接通过类名调用，不需要实例化
    def get_log(cls):
        # 3-实现日志的封装
        # 3.1-封装日志器
        cls.log = logging.getLogger()
        cls.log.setLevel(logging.INFO)  # 设置日志记录等级

        # 定义日志存储的文件完整路径, os.sep方法实现的自动识别/或\
        log_path = path_dir + os.sep + "log" + os.sep + "finance.log"
        # 3.2-封装处理器
        tf=handlers.TimedRotatingFileHandler(
            filename=log_path,   # 配置日志存储的路径和文件名
            when="midnight",    # 配置日志存储的时间间隔-天
            interval=1,        # 配置日志存储的时间监控-1天
            backupCount=3,     # 最多保存3份日志
            encoding="utf-8"   # 日志的编码配置
        )

        # 3.3-封装格式器
        fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"  # 定义日志显示的格式
        fm = logging.Formatter(fmt=fmt)

        # 3.4-将格式器装到处理器
        tf.setFormatter(fm)
        # 3.5-将处理器装到日志器
        cls.log.addHandler(tf)

        # 4-将日志器对象返回
        return cls.log


# 测试一下，封装方法行不行
if __name__ == "__main__":
    GetLog.get_log().info("步骤日志测试")
    GetLog.get_log().error("错误日志测试")
